package tongcheng.com.tongcheng.widght;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;

import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.compress.Luban;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;

import tongcheng.com.tongcheng.R;

import static com.luck.picture.lib.config.PictureConfig.LUBAN_COMPRESS_MODE;


/**
 * Created by Administrator on 2016/9/27.
 */
public class PhotoPopWindow {

    private PopupWindow popupWindow;
    private Context mContext;
    private Activity mActivity;
    private Fragment mFragment;
    public int maxChooseNum = 1;
    public int minChooseNum = 1;
  public   int single = PictureConfig.MULTIPLE;
    private String[] data = new String[]{"相册", "拍照"};


    public PhotoPopWindow(Context context, Activity activity) {
        this.mContext = context;
        this.mActivity = activity;
        init();
        initListener();

    }

    public PhotoPopWindow(Context context, Fragment activity) {
        this.mContext = context;
        this.mFragment = activity;
        init();
        initListener();

    }


    private void OpenXiangce() {
    // 进入相册 以下是例子：用不到的api可以不写
    PictureSelector pictureSelector;
    if (mActivity == null) {
        pictureSelector = PictureSelector.create(mFragment);
    } else {
        pictureSelector = PictureSelector.create(mActivity);
    }

    pictureSelector  .openGallery(PictureMimeType.ofImage())//全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()
            .theme(R.style.picture_QQ_style)//主题样式(不设置为默认样式) 也可参考demo values/styles下 例如：R.style.picture.white.style
            .maxSelectNum(maxChooseNum)// 最大图片选择数量 int
            .minSelectNum(minChooseNum)// 最小选择数量 int
            .imageSpanCount(4)// 每行显示个数 int
            .selectionMode(single)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
            .previewImage(true)// 是否可预览图片 true or false
            .previewVideo(false)// 是否可预览视频 true or false
            .enablePreviewAudio(false) // 是否可播放音频 true or false
            .compressGrade(Luban.CUSTOM_GEAR)// luban压缩档次，默认3档 Luban.THIRD_GEAR、Luban.FIRST_GEAR、Luban.CUSTOM_GEAR
            .isCamera(false)// 是否显示拍照按钮 true or false
            .isZoomAnim(true)// 图片列表点击 缩放效果 默认true
            .sizeMultiplier(0.5f)// glide 加载图片大小 0~1之间 如设置 .glideOverride()无效
            //.setOutputCameraPath("/CustomPath")// 自定义拍照保存路径,可不填
            .enableCrop(true)// 是否裁剪 true or false
            .compress(true)// 是否压缩 true or false
            .compressMode(LUBAN_COMPRESS_MODE)//系统自带 or 鲁班压缩 PictureConfig.SYSTEM_COMPRESS_MODE or LUBAN_COMPRESS_MODE
           // .glideOverride()// int glide 加载宽高，越小图片列表越流畅，但会影响列表图片浏览的清晰度
          //  .withAspectRatio()// int 裁剪比例 如16:9 3:2 3:4 1:1 可自定义
          //  .hideBottomControls()// 是否显示uCrop工具栏，默认不显示 true or false
          //  .isGif(false)// 是否显示gif图片 true or false
            .freeStyleCropEnabled(true)// 裁剪框是否可拖拽 true or false
          //  .circleDimmedLayer()// 是否圆形裁剪 true or false
           // .showCropFrame()// 是否显示裁剪矩形边框 圆形裁剪时建议设为false   true or false
          //  .showCropGrid()// 是否显示裁剪矩形网格 圆形裁剪时建议设为false    true or false
//            .openClickSound(true)// 是否开启点击声音 true or false
          //  .selectionMedia()// 是否传入已选图片 List<LocalMedia> list
         //   .previewEggs()// 预览图片时 是否增强左右滑动图片体验(图片滑动一半即可看到上一张是否选中) true or false
            .cropCompressQuality(90)// 裁剪压缩质量 默认90 int
          //  .compressMaxKB()//压缩最大值kb compressGrade()为Luban.CUSTOM_GEAR有效 int
          //  .compressWH() // 压缩宽高比 compressGrade()为Luban.CUSTOM_GEAR有效  int
           // .cropWH()// 裁剪宽高比，设置如果大于图片本身宽高则无效 int
          //  .rotateEnabled() // 裁剪是否可旋转图片 true or false
          //  .scaleEnabled()// 裁剪是否可放大缩小图片 true or false
          //  .videoQuality()// 视频录制质量 0 or 1 int
          //  .videoSecond()// 显示多少秒以内的视频or音频也可适用 int
         //   .recordVideoSecond()//视频秒数录制 默认60s int
            .forResult(PictureConfig.CHOOSE_REQUEST);//结果回调onActivityResult code




}

    private void OpenXiangji() {
        // 进入相册 以下是例子：用不到的api可以不写
        PictureSelector pictureSelector;
        if (mActivity == null) {
            pictureSelector = PictureSelector.create(mFragment);
        } else {
            pictureSelector = PictureSelector.create(mActivity);
        }

        pictureSelector

                .openCamera(PictureMimeType.ofImage())
               // .openGallery(PictureMimeType.ofImage())//全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()
                .theme(R.style.picture_QQ_style)//主题样式(不设置为默认样式) 也可参考demo values/styles下 例如：R.style.picture.white.style
                .maxSelectNum(maxChooseNum)// 最大图片选择数量 int
                .minSelectNum(minChooseNum)// 最小选择数量 int
                .imageSpanCount(4)// 每行显示个数 int
                .selectionMode(single)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
                .previewImage(false)// 是否可预览图片 true or false
                .previewVideo(false)// 是否可预览视频 true or false
                .enablePreviewAudio(false) // 是否可播放音频 true or false
                .compressGrade(Luban.CUSTOM_GEAR)// luban压缩档次，默认3档 Luban.THIRD_GEAR、Luban.FIRST_GEAR、Luban.CUSTOM_GEAR
                .isCamera(false)// 是否显示拍照按钮 true or false
                .isZoomAnim(true)// 图片列表点击 缩放效果 默认true
                .sizeMultiplier(0.5f)// glide 加载图片大小 0~1之间 如设置 .glideOverride()无效
//                .setOutputCameraPath("/CustomPath")// 自定义拍照保存路径,可不填
                .enableCrop(true)// 是否裁剪 true or false
                .compress(true)// 是否压缩 true or false
                 .compressMode(LUBAN_COMPRESS_MODE)//系统自带 or 鲁班压缩 PictureConfig.SYSTEM_COMPRESS_MODE or LUBAN_COMPRESS_MODE
                // .glideOverride()// int glide 加载宽高，越小图片列表越流畅，但会影响列表图片浏览的清晰度
//                  .withAspectRatio(9,16)// int 裁剪比例 如16:9 3:2 3:4 1:1 可自定义
                //  .hideBottomControls()// 是否显示uCrop工具栏，默认不显示 true or false
                //  .isGif(false)// 是否显示gif图片 true or false
                  .freeStyleCropEnabled(true)// 裁剪框是否可拖拽 true or false
                //  .circleDimmedLayer()// 是否圆形裁剪 true or false
                // .showCropFrame()// 是否显示裁剪矩形边框 圆形裁剪时建议设为false   true or false
                //  .showCropGrid()// 是否显示裁剪矩形网格 圆形裁剪时建议设为false    true or false
//                .openClickSound(true)// 是否开启点击声音 true or false
//                  .selectionMedia()// 是否传入已选图片 List<LocalMedia> list
                //   .previewEggs()// 预览图片时 是否增强左右滑动图片体验(图片滑动一半即可看到上一张是否选中) true or false
                  .cropCompressQuality(90)// 裁剪压缩质量 默认90 int
//                  .compressMaxKB(1)//压缩最大值kb compressGrade()为Luban.CUSTOM_GEAR有效 int
                //  .compressWH() // 压缩宽高比 compressGrade()为Luban.CUSTOM_GEAR有效  int
                // .cropWH()// 裁剪宽高比，设置如果大于图片本身宽高则无效 int
                //  .rotateEnabled() // 裁剪是否可旋转图片 true or false
                //  .scaleEnabled()// 裁剪是否可放大缩小图片 true or false
                //  .videoQuality()// 视频录制质量 0 or 1 int
                //  .videoSecond()// 显示多少秒以内的视频or音频也可适用 int
                //   .recordVideoSecond()//视频秒数录制 默认60s int

                .forResult(PictureConfig.CHOOSE_REQUEST);//结果回调onActivityResult code


    }

    private void initListener() {
        //popWindow退出后 模糊背景取消
        popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
            @Override
            public void onDismiss() {

                if (mActivity != null) {
                    WindowManager.LayoutParams lp = mActivity.getWindow().getAttributes();
                    lp.alpha = 1.0f;
                    mActivity.getWindow().setAttributes(lp);
                } else {
                    WindowManager.LayoutParams lp = mFragment.getActivity().getWindow().getAttributes();
                    lp.alpha = 1.0f;
                    mFragment.getActivity().getWindow().setAttributes(lp);
                }
            }
        });

    }

    private void init() {
        //3个参数的,填写视图,宽度,高度,
        //4个参数的:最后一个是是否获取焦点,true表示获取焦点
        View view = LayoutInflater.from(mContext).inflate(R.layout.listview, null);
        ListView lv = view.findViewById(R.id.pop_lv);
        RelativeLayout Rlv = view.findViewById(R.id.pop_dismiss);

        //使用ArrayAdapter
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                mContext,
                R.layout.text_item,
                R.id.text_photo,
                data
        );
        lv.setAdapter(adapter);
        //指定的popWindow显示
        popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
        //在popupWindow之外的区域可以触摸
        popupWindow.setOutsideTouchable(true);
        //设置 弹出后多余的模糊背景
        if (mActivity != null) {
            WindowManager.LayoutParams lp = mActivity.getWindow().getAttributes();
            lp.alpha = 0.5f;
            mActivity.getWindow().setAttributes(lp);
        } else {
            WindowManager.LayoutParams lp = mFragment.getActivity().getWindow().getAttributes();
            lp.alpha = 0.5f;
            mFragment.getActivity().getWindow().setAttributes(lp);
        }

        //设置背景色(Drawable) ,颜色?
        Drawable drawable = new ColorDrawable(Color.alpha(R.color.transparent)); //透明色
        popupWindow.setBackgroundDrawable(drawable);
//        popupWindow.showAtLocation(
//                view,  //参照的View
//                Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0
//        );//直接通过WindowManger进行位置设置
        Rlv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                popupWindow.dismiss();
            }
        });
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                Intent mIntent = new Intent();
                if (position == 0) {
                    //TODO 相册
                    OpenXiangce();

                } else {
                    //TODO 拍照
                    OpenXiangji();
                }
                popupWindow.dismiss();
            }
        });

    }


    public void show(LinearLayout view) {
        popupWindow.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
    }

    public void show(View view) {
        popupWindow.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
    }

    public void show(RelativeLayout view) {
        popupWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0);
    }

    /**
     * ItemClick的回调接口
     *
     * @author zhy
     */
    public interface OnBackLitener {
        void onBackClick(String item);
    }

    private OnBackLitener onBackLitener;

    public void setOnItemClickLitener(OnBackLitener onBackLitener) {
        this.onBackLitener = onBackLitener;
    }
}
